AWS Systems Manager Parameter Storeでパラメータを登録し、AWS CLIとAWS SDK for Python (Boto3) からそれぞれ取得してみた

AWS Systems Manager Parameter Storeでパラメータを登録し、AWS CLIとAWS SDK for Python (Boto3) からそれぞれ取得してみた

AWS Systems Manager Parameter Storeでパラメータを登録し、AWS CLIとAWS SDK for Python (Boto3) からそれぞれ取得します。パラメータの登録から取得までまとめた情報が意外と少なかったので、今回書いてみました。
Clock Icon2024.10.01

AWS環境にパラメータを登録したい

おのやんです。

みなさん、AWS環境にURLやアクセストークンなどのパラメータ情報を登録したいと思ったことはありませんか?私はあります。

AWS環境にパラメータ情報を登録する方法として、AWS Secrets Manager(以下、Secrets Manager)とAWS Systems Manager Parameter Store(以下、SSM Parameter Store)の2つをよく採用します。

パラメータを登録するという機能においては、これら2つのサービス間でそう大差ないですが、例えば「パラメータを自動ローテーションする必要がない」といった要件の場合には、料金のかからないSSM Parameter Storeを採用するケースがあります。

https://dev.classmethod.jp/articles/secretsmanager-or-parameterstore/

こういった際に、具体的にどういうプロセスでパラメータを登録・取得するのかを今回まとめましたので、そちらの内容を紹介します。

SSM Parameter Storeへのパラメータ登録

今回は、AWSのマネジメントコンソールからパラメータを登録します。

まずAWS Systems Manager(以下、SSM)のページに移動し、左側の「パラメータストア」に移動してパラメータの作成を押下します。

ssm_console

パラメータ作成画面では、SSM Parameter Store上で管理するパラメータ名と、それに対応する値を設定できます。今回は他のサービスのAPIを実行するためのエンドポイントを設定する想定で進めます。

create_parameter

パラメータの作成が正常に行われた場合、こちらのようにパラメータ一覧画面にパラメータが追加されます。これで、パラメータ追加作業は完了です。

added_parameter

AWS CLIからパラメータを取得

このパラメータは、AWS CLIから取得できます。

$ aws ssm get-parameter --name "/sample-app/log-api/dev/endpoint"

{
    "Parameter": {
        "Name": "/sample-app/log-api/dev/endpoint",
        "Type": "String",
        "Value": "https://example.com/v1/logs",
        "Version": 1,
        "LastModifiedDate": "2024-09-30T00:00:00.000000+00:00",
        "ARN": "arn:aws:ssm:ap-northeast-1:<account_id>:parameter/sample-app/log-api/dev/endpoint",
        "DataType": "text"
    }
}

SSM Parameter Storeに関するコマンドは、他にはこちらのドキュメントにまとまっています。

https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html

AWS SDK for Python (Boto3) からパラメータを取得

同様に、AWS SDK for Python (以下、Boto3)からもパラメータを取得できます。

sample.py
import boto3

def get_ssm_parameter(parameter_name, with_decryption=True):
    # SSM clientを作成
    ssm = boto3.client("ssm")

    # パラメータを取得
    response = ssm.get_parameter(
        Name=parameter_name,
        WithDecryption=with_decryption
    )

    # パラメータの値を返す
    return response["Parameter"]["Value"]

if __name__ == "__main__":
    parameter_name = "/my/parameter"
    value = get_ssm_parameter(parameter_name)

    if value:
        print(f"パラメータ '{parameter_name}' の値: {value}")

こちらの実行結果はこんな感じになります。

$ python3 sample.py

パラメータ '/sample-app/log-api/dev/endpoint' の値: https://example.com/v1/logs

Boto3の裏側はAWS CLIが実行されているので、できることは基本は同じです。Boto3での記法に関しては、こちらも参考にしてください。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm/client/get_parameter.html

シークレット値をAWS上で管理できる

SSM Parameter Storeでは、URLやアクセストークンなどのシークレットなパラメータも管理できます。これらをAWS上で設定して、実際に取得するコマンドやコードをまとめてみました。

意外とこれらの情報がまとまっているドキュメントが少なかったので、今回まとめてみました。SSM Parameter Storeを扱う時は、ぜひ参考にしてみてください。では!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.